package com.itlong.cloud.operate.service;

import com.itlong.cloud.POJO.DTO.operate.OperateUserInfoDTO;
import com.itlong.cloud.POJO.DTO.operate.OperateUserInfoGetPageDTO;
import com.itlong.cloud.POJO.PO.OperateUserInfoPO;
import com.itlong.cloud.POJO.VO.MessageVO;
import com.itlong.cloud.POJO.VO.operate.OperateEngineerProjectVO;
import com.itlong.cloud.POJO.VO.operate.OperateUserInfoGetOneVO;
import com.itlong.cloud.POJO.VO.operate.OperateUserInfoGetUserPageVO;
import com.itlong.cloud.utils.page.Page;

import java.io.UnsupportedEncodingException;
import java.util.List;

/**
 * <desc>
 *      运营-系统-用户信息业务处理接口
 * </desc>
 *
 *
 */
public interface IOperateUserInfoService {
    /**
     * <desc>
     *      修改密码
     * </desc>
     *
     * @param userName 用户名
     * @param password 密码
     * @param newPassword 新密码
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/13
     */
    public Integer updatePassword(String userName,String password,String newPassword) throws Exception;

    /**
     * <desc>
     *      保存人员
     * </desc>
     *
     * @param operateUserInfoPO 人员实体
     * @return
     * @author Jiaqi.X
     * @createDate 2017/09/27
     */
    Integer save(OperateUserInfoPO operateUserInfoPO) throws Exception;

    /**
     * <desc>
     *      更新人员
     * </desc>
     *
     * @param operateUserInfoPO 人员实体
     * @return
     * @author Jiaqi.X
     * @createDate 2017/09/27
     */
    Integer update(OperateUserInfoPO operateUserInfoPO) throws Exception;

    /**
     * <desc>
     *      获取所有人员
     * </desc>
     *
     * @return
     * @author Jiaqi.X
     * @createDate 2017/09/27
     */
    List<OperateUserInfoPO> getList();

    /**
     * <desc>
     *      获取分页数据
     * </desc>
     *
     * @param pageDTO   参数DTO
     * @return
     * @author Jiaqi.X
     * @createDate 2017/09/27
     */
    Page<OperateUserInfoGetUserPageVO> getPage(OperateUserInfoGetPageDTO pageDTO) throws Exception;

    /**
     * <desc>
     *      根据id查询人员
     * </desc>
     *
     * @param operateGroupPO 人员实体
     * @return
     * @author Jiaqi.X
     * @createDate 2017/09/27
     */
    OperateUserInfoPO getOne(OperateUserInfoPO operateGroupPO);

    /**
     * <desc>
     *      根据id查询人员 VO
     * </desc>
     *
     * @param operateUserInfoPO 人员实体
     * @return
     * @author Jiaqi.X
     * @createDate 2017/09/27
     */
    OperateUserInfoGetOneVO getOneVO(OperateUserInfoPO operateUserInfoPO) throws Exception;

    /**
     * <desc>
     *      删除用户
     * </desc>
     *
     * @param userIds 用户id数组
     * @return sql执行行数
     * @author Jiaqi.X
     * @createDate 2017/09/28
     */
    Integer delete(String userIds) throws Exception;

    /**
     * <desc>
     *      重置用户密码
     * </desc>
     *
     * @param userIds 用户id数组
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/12
     */
    Integer resetPassword(String userIds) throws Exception;

    /**
     * <desc>
     *      用户登录验证设置缓存信息
     * </desc>
     *
     * @param userInfo 用户实体
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/12
     */
    OperateUserInfoPO login(OperateUserInfoPO userInfo) throws UnsupportedEncodingException;

    /**
     * <desc>
     *      从缓存中获取用户信息
     * </desc>
     *
     * @param token 用户token
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/12
     */
    OperateUserInfoPO retrieve(String token);

    /**
     * <desc>
     *      从缓存中获取用户信息
     * </desc>
     *
     * @param token 用户token
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/12
     */
    OperateUserInfoPO newRetrieve(String token,String sessionId);

    /**
     * <desc>
     *      注销用户
     * </desc>
     *
     * @param token
     * @author Jiaqi.X
     * @createDate 2017/10/12
     */
    void cancel(String token);

    /**
     * <desc>
     *      检查账号是否被锁定
     * <desc/>
     * @param  account  检查的账号
     * @return  标准化响应结果
     * @author Juguang.S
     * @createDate 2018/07/18
     */
    MessageVO getOperateAccountLockDetail(String account);

    /**
     * <desc>
     *      运营登陆错误处理
     * <desc/>
     * @param   userInfo    登录用户DTO
     * @return  标准化响应结果
     * @author Juguang.S
     * @createDate 2018/07/18
     */
    MessageVO loginErrorHandler(OperateUserInfoPO userInfo);

    /**
     * <desc>
     *      判断原密码是否正确
     * <desc/>
     * @param   userId
     * @param   oldPassword
     * @return  标准化响应结果
     * @author Juguang.S
     * @createDate 2019/03/31
     */
    List<OperateUserInfoPO> isUserOldPsdExist(String userId,String oldPassword);

    /**
     * <desc>
     *      用户所属角色是否是工程部管理员
     * <desc/>
     * @param   userId
     * @return  标准化响应结果
     * @author Juguang.S
     * @createDate 2020/07/06
     */
    Integer isEngineerManage(String userId);

    /**
     * <desc>
     *      获取用户信息
     * </desc>
     *
     * @param userName 用户名
     * @return
     * @Author Zhu.yj
     * @createDate  2020/8/25
     */
    OperateUserInfoPO getUserByUserName(String userName) throws Exception;

    /**
     * <desc>
     *      获取工程人员项目列表
     * </desc>
     *
     * @return
     * @Author Zhu.yj
     * @createDate  2021/2/1
     */
    List<OperateEngineerProjectVO> getEngineerProjectList(OperateUserInfoDTO operateUserInfoDTO) throws Exception;
}
